package supporter;

import com.alibaba.fastjson.JSONObject;
import play.mvc.Http;

/**
 * @author adinlead
 */
public class RT {
    private static JSONObject setMessage(int code, String error) {
        JSONObject status = new JSONObject();
        status.put("code", code);
        status.put("msg", error);
        if (code != ResponseCode.SUCCESS) {
            Http.Response.current().status = code;
        }
        return status;
    }

    /**
     * @function 请求成功
     */
    public static JSONObject success() {
        return setMessage(ResponseCode.SUCCESS, "请求成功");
    }

    /**
     * @function 请求成功
     */
    public static JSONObject success(Object result) {
        JSONObject json = setMessage(ResponseCode.SUCCESS, "请求成功");
        json.put("data", result);
        return json;
    }

    /**
     * @function 未登录
     */
    public static JSONObject notLogin() {
        return setMessage(ResponseCode.NOT_LOGIN, "需要重新登录/未登录");
    }

    /**
     * @function 需要重新登录
     */
    public static JSONObject needLogin() {
        return setMessage(ResponseCode.NEED_LOGIN, "需要重新登录/未登录");
    }

    /**
     * @function 没有权限, 拒绝访问/拒绝操作
     */
    public static JSONObject notPermissions() {
        return setMessage(ResponseCode.NO_PERMISSIONS, "没有权限,拒绝访问/拒绝操作");
    }

    /**
     * @function 拒绝访问
     */
    public static JSONObject accessDenied() {
        return setMessage(ResponseCode.ACCESS_DENIED, "拒绝访问");
    }

    /**
     * @function 资源(页面)不存在
     */
    public static JSONObject isMissing() {
        return setMessage(ResponseCode.IS_MISSING, "资源(页面)不存在");
    }

    /**
     * @function 服务器错误
     */
    public static JSONObject serverError() {
        return setMessage(ResponseCode.SERVER_ERROR, "服务器错误");
    }

    /**
     * @function 服务器错误
     */
    public static JSONObject serverError(String msg) {
        return setMessage(ResponseCode.SERVER_ERROR, msg);
    }

    /**
     * @function 非法用户名
     */
    public static JSONObject illegalUsername() {
        return setMessage(ResponseCode.ILLEGAL_USERNAME, "非法用户名");
    }

    /**
     * @function 密码错误
     */
    public static JSONObject passwordError() {
        return setMessage(ResponseCode.PASSWORD_ERROR, "密码错误");
    }

    /**
     * @function 密码错误
     */
    public static JSONObject passwordError(int second) {
        JSONObject json = setMessage(ResponseCode.PASSWORD_ERROR, "密码错误");
        json.put("second", second);
        return json;
    }

    /**
     * @function 请求频率过高
     */
    public static JSONObject tooFrequently() {
        return setMessage(ResponseCode.TOO_FREQUENTLY, "请求频率过高");
    }

    /**
     * @function 请求频率过高
     */
    public static JSONObject tooFrequently(String error) {
        return setMessage(ResponseCode.TOO_FREQUENTLY, error);
    }

    /**
     * @function 缺少参数或参数错误
     */
    public static JSONObject parameterError() {
        return setMessage(ResponseCode.PARAMETER_ERROR, "缺少参数或参数错误");
    }

    /**
     * @function 缺少参数或参数错误
     */
    public static JSONObject parameterError(String msg) {
        return setMessage(ResponseCode.PARAMETER_ERROR, msg);
    }

    /**
     * @function 操作失败/请求失败
     */
    public static JSONObject isFailure() {
        return setMessage(ResponseCode.IS_FAILURE, "操作失败/请求失败");
    }

    /**
     * @function 操作失败/请求失败
     */
    public static JSONObject isFailure(String error) {
        return setMessage(ResponseCode.IS_FAILURE, error);
    }

    /**
     * @function 没有此用户
     */
    public static JSONObject notUser() {
        return setMessage(ResponseCode.NOT_USER, "没有此用户");
    }

    /**
     * @function 密码非法
     */
    public static JSONObject illegalPassword() {
        return setMessage(ResponseCode.ILLEGAL_PASSWORD, "密码非法");
    }

    /**
     * @function 验证码错误
     */
    public static JSONObject verifycodeError() {
        return setMessage(ResponseCode.VERIFYCODE_ERROR, "验证码错误");
    }

    /**
     * @function 验证码错误
     */
    public static JSONObject verifycodeError(String error) {
        return setMessage(ResponseCode.VERIFYCODE_ERROR, error);
    }

    /**
     * @function 验证码验证超时
     */
    public static JSONObject verifycodeOvertime() {
        return setMessage(ResponseCode.VERIFYCODE_OVERTIME, "验证码验证超时");
    }

    /**
     * @function 用户名重复
     */
    public static JSONObject usernameRepeat() {
        return setMessage(ResponseCode.USERNAME_REPEAT, "用户名重复");
    }

    public static JSONObject usernameRepeat(String error) {
        return setMessage(ResponseCode.USERNAME_REPEAT, error);//用户名重复
    }

    /**
     * @function 没有接收用户(用于短信发送)
     */
    public static JSONObject notReceiveUser() {
        return setMessage(ResponseCode.NOT_RECEIVE_USER, "没有接收用户(用于短信发送)");
    }

    /**
     * @function 短信发送失败
     */
    public static JSONObject smsSendFailure() {
        return setMessage(ResponseCode.SMS_SEND_FAILURE, "短信发送失败");
    }

    /**
     * @function 不支持/没有数据
     */
    public static JSONObject notSupported() {
        return setMessage(ResponseCode.NOT_SUPPORTED, "不支持/没有数据");
    }

    /**
     * @function 无法执行此操作
     */
    public static JSONObject cannotDoit() {
        return setMessage(ResponseCode.CANNOT_DOIT, "无法执行此操作");
    }

    /**
     * @function 无法执行此操作
     */
    public static JSONObject cannotDoit(String text) {
        return setMessage(ResponseCode.CANNOT_DOIT, text);
    }

    /**
     * @function 数据重复/重复提交
     */
    public static JSONObject dataError() {
        return setMessage(ResponseCode.DATA_ERROR, "数据重复/重复提交");
    }

    public static JSONObject dataError(String error) {
        return setMessage(ResponseCode.DATA_ERROR, error);
    }

    /**
     * @function 没有数据/没有相关数据
     */
    public static JSONObject noData() {
        return setMessage(ResponseCode.NO_DATA, "没有数据/没有相关数据");
    }

    /**
     * @function 没有数据/没有相关数据
     */
    public static JSONObject noData(String msg) {
        return setMessage(ResponseCode.NO_DATA, msg);
    }

    /**
     * @function 没有数据/没有相关数据
     */
    public static JSONObject noChannel() {
        return setMessage(ResponseCode.NO_DATA, "没有此渠道信息");
    }

    public class ResponseCode {
        public static final int SUCCESS = 0;//请求成功

        public static final int NOT_LOGIN = 401;//需要重新登录/未登录
        public static final int NEED_LOGIN = 401;//需要重新登录/未登录
        public static final int NO_PERMISSIONS = 402;//没有权限,拒绝访问/拒绝操作
        public static final int ACCESS_DENIED = 403;//拒绝访问
        public static final int IS_MISSING = 404;//资源(页面)不存在
        public static final int REQUEST_ENTITY_TOO_LARGE = 413;//超过限制

        public static final int SERVER_ERROR = 500;//服务器错误
        /**
         * 由《透明内容协商协议》（RFC 2295）扩展，代表服务器存在内部配置错误：被请求的协商变元资源被配置为在透明内容协商中使用自己，因此在一个协商处理中不是一个合适的重点。
         */
        public static final int VARIANT_ALSO_NEGOTIATES = 506;//服务器配置错误
        public static final int ILLEGAL_USERNAME = 600;//非法用户名
        public static final int PASSWORD_ERROR = 601;//密码错误
        public static final int TOO_FREQUENTLY = 602;//请求频率过高
        public static final int PARAMETER_ERROR = 603;//缺少参数或参数错误
        public static final int IS_FAILURE = 604;//操作失败/请求失败
        public static final int NOT_USER = 605;//没有此用户
        public static final int ILLEGAL_PASSWORD = 606;//密码非法
        public static final int VERIFYCODE_ERROR = 607;//验证码错误
        public static final int VERIFYCODE_OVERTIME = 608;//验证码验证超时
        public static final int USERNAME_REPEAT = 609;//用户名重复
        public static final int NOT_RECEIVE_USER = 610;//没有接收用户(用于短信发送)
        public static final int SMS_SEND_FAILURE = 611;//短信发送失败
        public static final int NOT_SUPPORTED = 612;//不支持/没有数据
        public static final int CANNOT_DOIT = 613;//无法执行此操作
        public static final int DATA_ERROR = 615;//数据重复/重复提交
        public static final int NO_DATA = 620;//没有数据/没有相关数据
    }
}
